package com.ruoyi.product.service.impl;

import java.beans.Transient;
import java.util.List;
        import com.ruoyi.common.core.utils.DateUtils;
        import com.ruoyi.common.core.utils.uuid.IdUtils;
        import com.ruoyi.common.core.context.SecurityContextHolder;
import com.ruoyi.product.domain.MallProductRuleCenter;
import com.ruoyi.product.request.MallProductInfoRequest;
import com.ruoyi.product.response.MallProductResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.product.mapper.MallProductInfoMapper;
import com.ruoyi.product.domain.MallProductInfo;
import com.ruoyi.product.service.IMallProductInfoService;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;

/**
 * 商品信息Service业务层处理
 *
 * @author ruoyi
 * @date 2025-07-28
 */
@Service
public class MallProductInfoServiceImpl implements IMallProductInfoService
{
    @Autowired
    private MallProductInfoMapper mallProductInfoMapper;
    @Autowired
    private MallProductRuleCenterServiceImpl mallProductRuleCenterService;

    /**
     * 查询商品信息
     *
     * @param id 商品信息主键
     * @return 商品信息
     */
    @Transactional
    @Override
    public MallProductResponse selectMallProductInfoById(String id)
    {
        //根据id查询商品信息表
        MallProductResponse mallProductResponse = mallProductInfoMapper.selectMallProductInfoById(id);
        //根据商品id查询对应的规格属性
        List<MallProductRuleCenter> ruleCenterList =  mallProductRuleCenterService.selectMallProductRuleCenterByProductId(mallProductResponse.getId());
        //将ruleCenterList的值赋给mallProductResponse的SkuList中
        mallProductResponse.setSkuList(ruleCenterList);
        return mallProductResponse;
    }

    /**
     * 查询商品信息列表
     *
     * @param mallProductInfo 商品信息
     * @return 商品信息
     */
    @Override
    public List<MallProductResponse> selectMallProductInfoList(MallProductInfo mallProductInfo)
    {
        return mallProductInfoMapper.selectMallProductInfoList(mallProductInfo);
    }

    /**
     * 新增商品信息
     *
     * @param mallProductInfoRequest 商品信息
     * @return 结果
     */
    @Transactional
    @Override
    public int insertMallProductInfo(MallProductInfoRequest mallProductInfoRequest)
    {
        //添加商品表
            mallProductInfoRequest.setId(IdUtils.simpleUUID());
            mallProductInfoRequest.setCreateBy(SecurityContextHolder.getUserId().toString());
            mallProductInfoRequest.setCreateTime(DateUtils.getNowDate());
            int i = mallProductInfoMapper.insertMallProductInfo(mallProductInfoRequest);
        //获取商品信息表skuList添加到商品中间表
        List<MallProductRuleCenter> skuList = mallProductInfoRequest.getSkuList();
        skuList.forEach(sku->{
            //商品编号一般都是uuid，更改商品编号
            sku.setNumber(IdUtils.simpleUUID());
            //为product_id设置值
            sku.setProductId(mallProductInfoRequest.getId());
            //调用商品规格中间表的业务层进行添加
            mallProductRuleCenterService.insertMallProductRuleCenter(sku);
        });
        return i;
    }

    /**
     * 修改商品信息
     *
     * @param mallProductInfoRequest 商品信息
     * @return 结果
     */
    @Override
    public int updateMallProductInfo(MallProductInfoRequest mallProductInfoRequest)
    {
        List<MallProductRuleCenter> skuList = mallProductInfoRequest.getSkuList();
        mallProductInfoRequest.setUpdateTime(DateUtils.getNowDate());
        //这个就是修改商品信息表
        int i = mallProductInfoMapper.updateMallProductInfo(mallProductInfoRequest);
        //当skuList不为空的时候进行修改中间表,其余只修改商品表
        if(CollectionUtils.isEmpty(skuList)){
            return i;
        }
        //我们接下来就要进行修改商品规格中间表
        mallProductRuleCenterService.updateProductRuleCenter(mallProductInfoRequest.getId(),mallProductInfoRequest.getSkuList());
        return i;
    }

    /**
     * 批量删除商品信息
     *
     * @param ids 需要删除的商品信息主键
     * @return 结果
     */
    @Override
    public int deleteMallProductInfoByIds(String[] ids)
    {
        return mallProductInfoMapper.deleteMallProductInfoByIds(ids);
    }

    /**
     * 删除商品信息信息
     *
     * @param id 商品信息主键
     * @return 结果
     */
    @Override
    public int deleteMallProductInfoById(String id)
    {
        return mallProductInfoMapper.deleteMallProductInfoById(id);
    }
}
